/*******************************************************************************
* Copyright (c) 2016 ARM Ltd. and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Anton Leherbauer (Wind River Systems)
* ARM Ltd and ARM Germany GmbH - application-specific implementation
*******************************************************************************/
package com.arm.cmsis.pack.project.wizards;
import java.util.Set;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.SelectionStatusDialog;
import com.arm.cmsis.pack.common.CmsisConstants;
import com.arm.cmsis.pack.project.CpProjectPlugIn;
import com.arm.cmsis.pack.project.IRteProject;
import com.arm.cmsis.pack.project.Messages;
/**
* Dialog for project selection
*/
public class ProjectSelectionDialog extends SelectionStatusDialog {
private TableViewer fTableViewer;
Set<IRteProject> fProjectsWithSpecifics;
// sizing constants
private final static int SIZING_SELECTION_WIDGET_HEIGHT = 250;
private final static int SIZING_SELECTION_WIDGET_WIDTH = 300;
public ProjectSelectionDialog(Shell parentShell, Set<IRteProject> projectsWithSpecifics) {
super(parentShell);
setTitle(Messages.ProjectSelectionDialog_RteProjectSelectionDialog);
fProjectsWithSpecifics = projectsWithSpecifics;
if (fProjectsWithSpecifics == null || fProjectsWithSpecifics.isEmpty()) {
setMessage(Messages.ProjectSelectionDialog_NoRteProjectFound);
} else {
setMessage(Messages.ProjectSelectionDialog_SelectRteProject);
}
}
@Override
protected Control createDialogArea(Composite parent) {
// page group
Composite composite = (Composite) super.createDialogArea(parent);
createMessageArea(composite);
fTableViewer = new TableViewer(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
fTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
doSelectionChanged(((IStructuredSelection) event.getSelection()).toArray());
}
});
fTableViewer.addDoubleClickListener(new IDoubleClickListener() {
@SuppressWarnings("synthetic-access")
@Override
public void doubleClick(DoubleClickEvent event) {
okPressed();
}
});
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.heightHint = SIZING_SELECTION_WIDGET_HEIGHT;
data.widthHint = SIZING_SELECTION_WIDGET_WIDTH;
fTableViewer.getTable().setLayoutData(data);
fTableViewer.setContentProvider(ArrayContentProvider.getInstance());
fTableViewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
IRteProject project = (IRteProject) element;
if (project != null) {
return project.getName();
}
return null;
}
@Override
public Image getImage(Object element) {
IRteProject project = (IRteProject) element;
if (project != null) {
return PlatformUI.getWorkbench().getSharedImages()
.getImage(org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT);
}
return null;
}
});
fTableViewer.setInput(fProjectsWithSpecifics);
doSelectionChanged(new Object[0]);
return composite;
}
void doSelectionChanged(Object[] objects) {
if (objects.length != 1) {
updateStatus(new Status(IStatus.ERROR, CpProjectPlugIn.PLUGIN_ID, CmsisConstants.EMPTY_STRING));
setSelectionResult(null);
} else {
updateStatus(new Status(IStatus.OK, CpProjectPlugIn.PLUGIN_ID, CmsisConstants.EMPTY_STRING));
setSelectionResult(objects);
}
}
@Override
protected void computeResult() {
// does nothing
}
}